home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
t_os
/
nttcalc
/
nttcalc.bas
next >
Wrap
BASIC Source File
|
1993-11-30
|
12KB
|
382 lines
100 '
110 '********************************************************************
120 '** **
130 '** 「☆FAPX小判鮫☆通話料金計算NTTCALCV1.2☆」 **
140 '** **
150 '** NIFTY-Serve : HAD01045 (SAINT) **
160 '** **
170 '** FOR FM-TOWNS + MOPTERM + FAPX **
180 '** **
190 '********************************************************************
200 '
210 CLEAR
220 ON ERROR GOTO *TRAP
230 GOSUB *INIT : ' 初期化
240 GOSUB *NTT_INPUT : ' NTTCALC.DAT 読み込み
250 GOSUB *DAT_INPUT : ' CONNECT.DAT 読み込み
260 GOSUB *MAIN2 : ' 電話番号CHECK
270 GOSUB *NTT_OUTPUT
280 GOSUB *月間集計入力
290 GOSUB *月間集計
300 GOSUB *月間表示
310 GOSUB *ENDING
320 GOTO 280
330 '
340 '
350 '
360 '
370 '
380 *INIT : ' 初期化
390 DIM L$(999),TEL$(999),NTT(999),LOGOUT$(999)
400 DIM T1$(999),T1(999),DISCOUNT(999),GTIME(23)
410 DIM YEAR$(999),YEAR(999),MN$(999),MN(999),DAY$(999),DAY(999)
420 DIM WEEK(999),TI(999),NT$(99),NT(99),DA3$(6)
430 DIM GOLD2(999),GOLD3(6),GOLD4(6)
440 DA3$(1)="-01":DA3$(2)="-06":DA3$(3)="-11"
450 DA3$(4)="-16":DA3$(5)="-21":DA3$(6)="-26"
460 DIM DAYTBL(13):RESTORE *DAYTBL
470 FOR I=0 TO 12:READ DAYTBL(I):NEXT I
480 *DAYTBL
490 DATA 0,31,28,31,30,31,30,31,31,30,31,30,31
500 DIM NTTTBL(5,2):RESTORE *NTTTBL
510 FOR I=1 TO 2:FOR J=1 TO 5:READ NTTTBL(J,I):NEXT J:NEXT I
520 *NTTTBL
530 DATA 180, 90, 45, 30, 21
540 DATA 240, 120, 60, 40, 28
550 WINDOW (0,0)-(639,479):COLOR 7,1,,4:WIDTH 80,25:CLS
560 LOCATE 0,0:LINE (0,0)-(639,15),PSET,3,BF
570 PRINT "FAPX小判鮫ソフト(^^)通話料金計算NTTCALC V1.2 << HAD01045 SAINT >> "
580 RETURN
590 '
600 '
610 '
620 '
630 '
640 *NTT_INPUT : ' NTTCALC.DAT 読み込み
650 MX1=16:MX2=16*21:MY1=20*2:MY2=20*4:COL1=0:COL2=6:GOSUB *BOX
660 COLOR 1:LOCATE 3, 3:PRINT "只今NTTCALC.DATを読み込み中です"
670 OPEN "I",#1,"NTTCALC.DAT"
680 INPUT #1,NT
690 FOR K=1 TO NT
700 INPUT #1,NT$(K),NT(K)
710 NEXT K
720 CLOSE #1
730 RETURN
740 '
750 '
760 '
770 '
780 '
790 *DAT_INPUT : ' CONNECT.DAT 読み込み
800 MX1=16:MX2=16*21:MY1=20*2:MY2=20*4:COL1=0:COL2=6:GOSUB *BOX
810 COLOR 1:LOCATE 3, 3:PRINT "只今CONNECT.DATを読み込み中です"
820 OPEN "I",#1,"CONNECT.DAT"
830 I=0
840 LINE INPUT #1,L$(I)
850 IF EOF(1) THEN *DAT_CLOSE
860 I=I+1
870 IF I=1000 THEN *LIMIT
880 GOTO 840
890 *DAT_CLOSE
900 NN=I
910 CLOSE #1
920 RETURN
930 '
940 *LIMIT
950 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=0:COL2=7:GOSUB *BOX
960 COLOR 2:LOCATE 3,19:PRINT "アクセス回数が1000回を越えています"
970 LOCATE 3,20:PRINT "不都合な方はNIFTY:HAD01045 (SAINT)"
980 LOCATE 3,21:PRINT "までメールを下さい"
990 WAIT 1000:END
1000 '
1010 '
1020 '
1030 '
1040 *MAIN2
1050 ' 電話番号 TEL$ , LOGOUT時間 LOGOUT$ , 通話時間 T1$ の取得
1060 ' LOGOUT時間→年月日曜日取得 YEAR$ , MN$, DAY$ , WEEK
1070 ' 割引時間かどうかの判定 DISCOUNT =1(NO) / 2(YES)
1080 '
1090 MX1=16:MX2=16*21:MY1=20*2:MY2=20*4:COL1=0:COL2=6:GOSUB *BOX
1100 COLOR 1:LOCATE 3, 3:PRINT "只今通話料金を計算中です..."
1110 GOSUB *MAIN3
1120 FOR I=0 TO NN
1130 L$=L$(I)
1140 GOSUB *L_CUT
1150 TEL$(I)=TEL$:LOGOUT$(I)=LOGOUT$:T1$(I)=T1$:T1(I)=T1:GTIME(LHOUR)=GTIME(LHOUR)+1
1160 GOSUB *DA_CUT
1170 YEAR$(I)=YEAR$:MN$(I)=MN$:DAY$(I)=DAY$:WEEK(I)=WEEK
1180 GOSUB *割引判定
1190 DISCOUNT(I)=DISCOUNT
1200 GOSUB *MAIN4
1210 NEXT I
1220 LOGOUT1$=LOGOUT$(0):LOGOUT2$=LOGOUT$(NN)
1230 GOSUB *MAIN5
1240 GOSUB *MAIN6
1250 RETURN
1260 '
1270 '
1280 '
1290 '
1300 '
1310 *MAIN5
1320 COLOR 1:LOCATE 7,13:PRINT "記録期間 :";LOGOUT1$
1330 LOCATE 7,14:PRINT " ∥"
1340 LOCATE 7,15:PRINT " :";LOGOUT2$
1350 RETURN
1360 '
1370 '
1380 '
1390 '
1400 *MAIN6
1410 MX1=16*23:MX2=16*39:MY1=20*2:MY2=20*7:COL1=0:COL2=4:GOSUB *BOX
1420 COLOR 1:LOCATE 47,3:PRINT "[LOGOUT時間集計]"
1430 LINE (386,111)-(612,112),PSET,1,BF:GTIMEMAX=0
1440 LOCATE 49,6:PRINT "0 6 12 18 23"
1450 FOR G=0 TO 23
1460 IF GTIMEMAX<GTIME(G) THEN GTIMEMAX=GTIME(G)
1470 NEXT G
1480 FOR G=0 TO 23
1490 GTIMERATE=GTIME(G)/GTIMEMAX
1500 GTIME$=RIGHT$(STR$(GTIME(G)),2)
1510 IF GTIMERATE<>0 THEN LINE (392+G*9,110)-(399+G*9,110-GTIMERATE*25),PSET,3,BF
1520 SYMBOL (392+G*9,99-GTIMERATE*25),GTIME$,.5!,.75!,1
1530 NEXT G
1540 '
1550 '
1560 '
1570 '
1580 '
1590 *MAIN3
1600 GOLD=0
1610 MX1=16:MX2=16*21:MY1=20*5:MY2=20*16:COL1=0:COL2=4:GOSUB *BOX
1620 COLOR 1:LOCATE 3, 6:PRINT "[総通話料金計算]"
1630 RETURN
1640 '
1650 '
1660 '
1670 *MAIN4
1680 IF TEL$(I)="" THEN 1840
1690 COLOR 1
1700 LOCATE 7, 8:PRINT "電話番号 :";TEL$(I)
1710 LOCATE 7, 9:PRINT "LOGOUT時間:";LOGOUT$(I)
1720 LOCATE 7,10:PRINT "通話時間 : ";T1$(I)
1730 FOR K=1 TO NT
1740 IF TEL$(I)=NT$(K) THEN 1790
1750 NEXT K
1760 GOSUB *新電話番号
1770 NT=NT+1:NT$(NT)=TEL$(I):NT(NT)=A
1780 GOTO 1730
1790 GOLD2(I)=(T1(I) \ NTTTBL(NT(K),DISCOUNT(I))+1) * 10
1800 GOLD=GOLD+GOLD2(I)
1810 ' COLOR DISCOUNT(I)
1820 LOCATE 7,11:PRINT USING "通話料金 : ######円";GOLD2(I)
1830 LOCATE 7,12:PRINT USING "総通話料金: ######円";GOLD
1840 RETURN
1850 '
1860 '
1870 '
1880 '
1890 *新電話番号
1900 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=0:COL2=7:GOSUB *BOX
1910 COLOR 2:LOCATE 3,19:PRINT "初めての電話番号(";TEL$(I);")です"
1920 LOCATE 3,20:PRINT "10円で通話可能な時間を選んでください"
1930 LOCATE 3,21:PRINT "(1)・・・180秒 (2)・・・90秒 (3)・・・45秒"
1940 LOCATE 3,22:PRINT "(4)・・・30秒 (5)・・・21秒"
1950 LOCATE 3,23:PRINT " 番号=>";
1960 INPUT "",A$:A=VAL(A$)
1970 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=1:COL2=1:GOSUB *BOX
1980 COLOR 2:LOCATE 3,19:PRINT " "
1990 LOCATE 3,20:PRINT " "
2000 LOCATE 3,21:PRINT " "
2010 LOCATE 3,22:PRINT " "
2020 LOCATE 3,23:PRINT " ";
2030 IF A=0 OR A>5 THEN 1900
2040 RETURN
2050 '
2060 *NTT_OUTPUT
2070 OPEN "O",#1,"NTTCALC.DAT"
2080 PRINT #1,NT
2090 FOR K=1 TO NT
2100 WRITE #1,NT$(K),NT(K)
2110 NEXT K
2120 CLOSE #1
2130 RETURN
2140 '
2150 '
2160 '
2170 '
2180 '
2190 *BOX
2200 BEEP 1
2210 LINE (MX2+1,MY1+5)-(MX2+5,MY2+5),PSET,COL1,BF
2220 LINE (MX1+5,MY2+1)-(MX2+5,MY2+5),PSET,COL1,BF
2230 LINE (MX1,MY1)-(MX2,MY2),PSET,COL2,BF
2240 BEEP 0
2250 RETURN
2260 '
2270 '
2280 '
2290 '
2300 '
2310 *TRAP
2320 IF ERL=820 THEN BEEP:MX1=50:MX2=590:MY1=350:MY2=405:COL1=0:COL2=7:GOSUB *BOX:LOCATE 11,19:COLOR 2:PRINT "CONNECT.DATが見つかりません。処理を中止します。":GOTO 2400
2330 IF ERL=670 THEN RESUME 250
2340 IF ERL=2070 THEN KILL "NTTCALC.DAT" : RESUME 2070
2350 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=0:COL2=7:GOSUB *BOX
2360 COLOR 2:LOCATE 3,19:PRINT "エラーが発生しました"
2370 LOCATE 3,20:PRINT "ERR=";ERR;" ERL=";ERL
2380 LOCATE 3,21:PRINT "不都合な方はNIFTY:HAD01045 (SAINT)"
2390 LOCATE 3,22:PRINT "までメールを下さい"
2400 WAIT 500:END
2410 '
2420 '
2430 '
2440 *DA_CUT
2450 ' DA$に"1993-03-13"などを入れて呼ぶとWEEKに曜日が入る
2460 ' 日曜日が WEEK=1 になる
2470 YEAR$=MID$(DA$,1,4):YEAR=VAL(YEAR$)
2480 MN$=MID$(DA$,6,2):MN=VAL(MN$)
2490 DAY$=MID$(DA$,9,2):DAY=VAL(DAY$)
2500 IF YEAR*MN*DAY=0 THEN BEEP :STOP
2510 WEEK=0:BASE0=2:FAR=0
2520 BASE = ((BASE0-1)+YEAR-1900+((YEAR-1900)/4)) MOD 7 +1
2530 FOR II=1 TO MN-1:FAR=FAR+DAYTBL(II):NEXT II
2540 FAR = FAR + DAY - 1
2550 IF MN>2 AND YEAR MOD 4=0 THEN FAR=FAR+1
2560 WEEK = (BASE-1+FAR) MOD 7 +1: ' 日曜日が「1」になる
2570 RETURN
2580 '
2590 '
2600 '
2610 '
2620 *L_CUT
2630 ' L$=L$(I)を入れて呼ぶと、TEL$,LOGOUT$,T1$,DA$,TI$を返す
2640 TEL$="":LOGOUT$="":T1$=""
2650 J=8
2660 II$=MID$(L$,J,1)
2670 IF II$=";" THEN 2710
2680 TEL$=TEL$+II$
2690 J=J+1
2700 GOTO 2660
2710 J=J+10
2720 II$=MID$(L$,J,1)
2730 IF II$=";" THEN 2770
2740 LOGOUT$=LOGOUT$+II$
2750 J=J+1
2760 GOTO 2720
2770 J=J+8
2780 II$=MID$(L$,J,1)
2790 IF II$=";" THEN 2830
2800 T1$=T1$+II$
2810 J=J+1
2820 GOTO 2780
2830 DA$=MID$(LOGOUT$,1,10)
2840 TI$=MID$(LOGOUT$,12,8)
2850 THOUR$=MID$(T1$,1,2):TMIN$=MID$(T1$,4,2):TSEC$=MID$(T1$,7,2)
2860 THOUR=VAL(THOUR$):TMIN=VAL(TMIN$):TSEC=VAL(TSEC$)
2870 T1=3600*THOUR+60*TMIN+TSEC
2880 LHOUR$=MID$(TI$,1,2):LMIN$=MID$(TI$,4,2):LSEC$=MID$(TI$,7,2)
2890 LHOUR=VAL(LHOUR$):LMIN=VAL(LMIN$):LSEC=VAL(LSEC$)
2900 RETURN
2910 '
2920 '
2930 '
2940 '
2950 '
2960 *割引判定
2970 ' LOGOUT時間TI$="23:00:00"と通話時間T1$をいれて呼ぶと
2980 ' NTT標準割引(23:00~08:00)の場合DISCOUNT=2が入る
2990 DISCOUNT=1:T1=VAL(T1$)
3000 HOUR$=MID$(TI$,1,2):HOUR=VAL(HOUR$)
3010 MIN$=MID$(TI$,4,2):MIN=VAL(MIN$)
3020 SEC$=MID$(TI$,7,2):SEC=VAL(SEC$)
3030 TTOTAL1=HOUR*3600+MIN*60+SEC
3040 TTOTAL2=TTOTAL1-T1
3050 ' PRINT "ttotal1=";TTOTAL1,"ttotal2=";TTOTAL2
3060 IF (TTOTAL1>=82800) * (TTOTAL2>=82800) THEN DISCOUNT=2
3070 IF (TTOTAL1<28800) * (TTOTAL2>=-3600) THEN DISCOUNT=2
3080 RETURN
3090 '
3100 '
3110 '
3120 '
3130 '
3140 '
3150 *月間集計入力
3160 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=0:COL2=7:GOSUB *BOX
3170 COLOR 2:LOCATE 3,19:PRINT "一ヵ月の通話料金を計算します"
3180 LOCATE 3,20:PRINT "計算したい年と月を入力してください"
3190 LOCATE 3,22:PRINT " 年 (例)1993 番号=>";
3200 INPUT "",A$:YEAR1=INT(VAL(A$))
3210 IF YEAR1=0 THEN 3170
3220 LOCATE 3,23:PRINT " 月 (例)12 番号=>";
3230 INPUT "",A$:MN1=INT(VAL(A$))
3240 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=1:COL2=1:GOSUB *BOX
3250 COLOR 2:LOCATE 3,19:PRINT " "
3260 LOCATE 3,20:PRINT " "
3270 LOCATE 3,21:PRINT " "
3280 LOCATE 3,22:PRINT " "
3290 LOCATE 3,23:PRINT " ";
3300 IF MN1=0 OR MN1>12 THEN *月間集計入力
3310 RETURN
3320 '
3330 '
3340 '
3350 '
3360 *月間集計
3370 '
3380 MX1=16:MX2=16*21:MY1=20*2:MY2=20*4:COL1=0:COL2=6:GOSUB *BOX
3390 COLOR 1:LOCATE 3, 3:PRINT "月間通話料金を計算中です..."
3400 MN2=MN1+1
3410 YEAR2=YEAR1
3420 IF MN2=13 THEN MN2=1:YEAR2=YEAR1+1
3430 MN1$=RIGHT$("00"+MID$(STR$(MN1),2),2)
3440 YEAR1$=MID$(STR$(YEAR1),2)
3450 DA1$=YEAR1$+"-"+MN1$
3460 MN2$=RIGHT$("00"+MID$(STR$(MN2),2),2)
3470 YEAR2$=MID$(STR$(YEAR2),2)
3480 DA2$=YEAR2$+"-"+MN2$
3490 FOR J=1 TO 6
3500 GOLD3(J)=0:GOLD4(J)=0
3510 NEXT J
3520 FOR I=0 TO NN
3530 FOR J=1 TO 6
3540 IF LOGOUT$(I)>=DA1$+DA3$(J) AND LOGOUT$(I)<=DA2$+DA3$(J) THEN GOLD3(J)=GOLD3(J)+GOLD2(I):IF DISCOUNT(I)=2 THEN GOLD4(J)=GOLD4(J)+GOLD2(I)
3550 NEXT J
3560 NEXT I
3570 RETURN
3580 '
3590 '
3600 '
3610 '
3620 *月間表示
3630 '
3640 '
3650 MX1=16*23:MX2=16*39:MY1=20*8:MY2=20*16:COL1=0:COL2=6:GOSUB *BOX
3660 COLOR 1:LOCATE 47,9:PRINT "[月間通話料金] (23時~8時)"
3670 FOR J=1 TO 6
3680 DA3$=DA1$+DA3$(J)
3690 LOCATE 48,9+J:PRINT USING "& &: #####円 (#####円)";DA3$;GOLD3(J);GOLD4(J)
3700 NEXT J
3710 LOCATE 60,16:PRINT "表示日より一ヵ月分"
3720 RETURN
3730 '
3740 '
3750 '
3760 '
3770 *ENDING
3780 '
3790 '
3800 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=0:COL2=7:GOSUB *BOX
3810 COLOR 2:LOCATE 3,19:PRINT "プログラムを終了しますか"
3820 LOCATE 3,20:PRINT " 終了する [RETURN]"
3830 LOCATE 3,21:PRINT " 別の月間集計を行う [R]"
3840 LOCATE 3,22:PRINT " 入力=>";
3850 INPUT "",A$:IF A$<>"R" AND A$<>"r" THEN END
3860 COLOR 2:LOCATE 3,19:PRINT " "
3870 LOCATE 3,20:PRINT " "
3880 LOCATE 3,21:PRINT " "
3890 LOCATE 3,22:PRINT " ";
3900 RETURN